package com.xm.copyonwritearraylist;

import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 高并发缓存
 * 使用场景：
 *   缓存更新时直接替换整个列表（避免部分更新导致的并发问题）。
 *   读操作无锁，适用于高并发查询。
 */
public class ProductCache {
    private CopyOnWriteArrayList<String> cache = new CopyOnWriteArrayList<>();

    // 初始化缓存（从数据库加载）
    public void loadCache() {
        List<String> dbData = fetchFromDatabase();
        cache.addAll(dbData);
    }

    // 查询缓存（无锁）
    public String getProduct(String id) {
        return cache.stream()
                   .filter(p -> Objects.equals(p, id))
                   .findFirst()
                   .orElse(null);
    }

    // 更新缓存（触发写时复制）
    public void refreshCache() {
        List<String> newData = fetchFromDatabase();
        cache = new CopyOnWriteArrayList<>(newData);
    }

    private List<String> fetchFromDatabase() {
        // 模拟数据库查询耗时
        return Arrays.asList(new String[]{"1", "2", "3", "4"});
    }
}